草庐IT

c++ - RAII 和 C++ STL

全部标签

c++ - STL的copy函数的效率

我正在尝试从条目列表构建一组唯一的单词,每个条目都有一个字符串vector。所以我创建了一个名为Insert的函数,它会像这样为每个条目调用:for(auto&e:_Entries)_Dictionary.Insert(begin(e.getNameWords()),end(e.getNameWords()));_Dictionary类内部有一个集合(STL容器),我写了Insert函数如下:templatevoidInsert(InputIteratorfirst,InputIteratorlast){for(autoit=first;it!=last;++it)_AllWords.

c++ - STL容器中的value_type有什么用?

value_type在STL容器中有什么用?来自MSDN://vector_value_type.cpp//compilewith:/EHsc#include#includeintmain(){usingnamespacestd;vector::value_typeAnInt;AnInt=44;cout我不明白value_type在这里实现了什么?变量也可以是int吗?使用它是因为编码人员懒于检查vector中存在的对象类型吗?我觉得这些也跟它差不多allocator_type,size_type,difference_type,reference,key_type等..

c++ - 一种从 .STL(立体光刻)文件计算质心的方法?

我正在尝试计算STL文件中定义的对象的质心(x,y,z)坐标(立体光刻,不要与标准模板库混淆)。STL文件包含由三角形组成的边界定义的封闭对象(或多个对象)。三角形本身不一定按任何顺序排列,文件只是在3D空间中漂浮的每个三角形的坐标3个顶点加上三角形的法vector(应忽略法vector,因为它并不总是正确完成)。没有任何东西将每个三角形相互联系起来,假设对象是封闭的。一种简单的方法是将一个体积(在本例中为一个盒子)分成数百万个元素,并确定每个元素是否在STL文件中定义的对象内部,然后求和这些矩并计算中心质量。这会起作用,但它远非优雅且极其缓慢。另一种方法是将边界表示转换为许多堆积的四

c++ - STL 可迭代对象的迭代器循环宏

概念因此,我试图定义一个宏来简化以下代码:for(vector::iteratoriter=iterable.begin();iter!=iterable.end();iter++)和for(map::iteratoriter=iterable.begin();iter!=iterable.end();iter++)等等现有工作到目前为止,我有#defineevery(iter,iterable)::iteratoriter=iterable.begin();iter!=iterable.end();iter++for(vectorevery(iter,iterable))但我想进一步

c++ - 这个 RAII 风格的 Objective-C 类可以工作吗?

在C++下,我有一个Mutex类,我使用这个RAII风格的类来确保互斥锁被解锁,无论方法返回的原因是什么:classMutexLock{protected:Mutex&m_mutex;public:MutexLock(Mutex&mutex):m_mutex(mutex){m_mutex.lock();}~MutexLock(){m_mutex.unlock();}};有什么理由,在使用ARC时,等效的Objective-C类不能正常工作:@interfaceLocker:NSObject{NSLock*_lock;}-(void)setLock:(NSLock*)lock;@end@

C++ STL - STL sort() 的第三个参数如何工作?

我想对classPerson的对象数组进行排序基于其数据成员'age'.我将对象存储在vectorv中.据我所知,至少有4种方法可以执行此操作,根据下面编写的方法,我有以下问题。如何operator()在类工作中定义?我不应该在这里重载'我在方法1中发送了一个对象作为第三个参数。但是,在方法2中,我发送了一个函数的名称。为什么会这样?四种方法中哪种最好?我觉得方法三最简单。方法一classcmp{public:booloperator()(Personconst&a,Personconst&b){returna.age方法二boolcmp(constPersona,constPerso

c++ - 在排序的 STL 容器中查找给定键的 "best matching key"

问题我有带时间戳的数据,我需要根据时间戳进行搜索,以便获得与我的输入时间戳最接近的现有时间戳。最好这应该用STL来解决。boost::*或STL::tr1::*(来自带有Featurepack的VS9)也是可能的。带时间戳的数据示例:structSTimestampedData{time_tm_timestamp;//SortingcriterionCDatam_data;//Payload}接近stl::vector,sort()和equal_range()自map或set只允许我找到完全匹配,我不会进一步使用其中之一。所以现在我有一个vector我将数据添加到其中。在搜索之前,我使

c++ - 如何为 STL 类容器提供公共(public) const 迭代器和私有(private)非 const 迭代器?

我有一个包含std::list的类,我希望为const_iterator提供publicbegin()和end(),为普通迭代器提供privatebegin()和end()。但是,编译器看到私有(private)版本并提示它是私有(private)的,而不是使用公共(public)const版本。我知道C++不会重载返回类型(在本例中为const_iterator和迭代器),因此它选择了非常量版本,因为我的对象不是const。如果没有在调用begin()之前将我的对象转换为const或者没有重载名称begin是否有办法实现这一点?我认为这是一个已知的模式,人们以前已经解决过,并且想效仿

c++ - 从子类的STL vector 到基类 vector 的转换

我想知道是否可以将派生类值的vector转换为基类值的vector。具体来说,我希望能够将基类对象的vector传递给其形式参数采用基类vector的函数。它似乎不可能直接作为以下代码示例产生错误(使用g++):#includeclassA{};classB:publicA{};voidfunction(std::vectorobjs){}intmain(intargc,char**argv){std::vectorobjs_b;objs_b.push_back(B());function(objs_b);}test.cc:16:error:conversionfrom‘std::ve

c++ - 如何在 C++ 代码中链接 STL?

我在MySql5.5.7rc的源文件sql_parse.cc中写了一些代码。我在那里使用了vector、allocator等,但编译器未与标准模板库(STL)链接。谁能建议我该怎么做?这是错误消息:libsql.a(sql_parse.cc.o):Infunction`std::vector,std::allocator>,std::allocator,std::allocator>>>::push_back(std::basic_string,std::allocator>const&)':sql_parse.cc:(.text._ZNSt6vectorISsSaISsEE9push